<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
    <TITLE>BNF for DataQL.jj</TITLE>
</HEAD>
<BODY>
<H1 ALIGN=CENTER>BNF for DataQL.jj</H1>
<H2 ALIGN=CENTER>TOKENS</H2>
<TABLE>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// ------------------------------------------------------------------------------------------------
/* Ignore Comments */</PRE>
        </TD>
    </TR>
    <!-- Token -->
    <TR>
        <TD>
   <PRE>
&lt;DEFAULT&gt; SKIP : {
" "
| "\t"
| "\n"
| "\r"
| "\f"
}

   </PRE>
        </TD>
    </TR>
    <!-- Token -->
    <TR>
        <TD>
   <PRE>
&lt;DEFAULT&gt; SPECIAL : {
&lt;C_SINGLE_COMMENT: "//" (~["\n","\r","\f"])* &lt;EOL&gt;&gt;
| &lt;C_MULTILINE_COMMENT: "/*" (~[])* "*/"&gt;
| &lt;EOL: "\n" | "\r" | "\f"&gt;
}

   </PRE>
        </TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
/* Number */</PRE>
        </TD>
    </TR>
    <!-- Token -->
    <TR>
        <TD>
   <PRE>
&lt;DEFAULT&gt; TOKEN : {
&lt;#ZERO: "0"&gt;
| &lt;#SYMBOL: ["+","-"]&gt;
| &lt;#DIGIT: ["0"-"9"]&gt;
| &lt;INTEGER_NUM: (&lt;SYMBOL&gt;)? (&lt;DIGIT&gt;)+&gt;
| &lt;HEX_NUM: &lt;ZERO&gt; ["x","X"] (["0"-"9","a"-"f","A"-"F"])+&gt;
| &lt;OCTAL_NUM: &lt;ZERO&gt; ["o","O"] (["0"-"7"])+&gt;
| &lt;BINARY_NUM: &lt;ZERO&gt; ["b","B"] (["0"-"7"])+&gt;
| &lt;DECIMAL_NUM: (&lt;SYMBOL&gt;)? (&lt;DIGIT&gt;)+ ("." (&lt;DIGIT&gt;)*)? (["e","E"] (&lt;SYMBOL&gt;)? (&lt;DIGIT&gt;)+)?&gt;
}

   </PRE>
        </TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
/* key words */</PRE>
        </TD>
    </TR>
    <!-- Token -->
    <TR>
        <TD>
   <PRE>
&lt;DEFAULT&gt; TOKEN : {
&lt;IF: "if"&gt;
| &lt;ELSEIF: "elseif"&gt;
| &lt;ELSE: "else"&gt;
| &lt;END: "end"&gt;
| &lt;RETURN: "return"&gt;
| &lt;THROW: "throw"&gt;
| &lt;EXIT: "exit"&gt;
| &lt;VAR: "var"&gt;
| &lt;LAMBDA: "lambda"&gt;
| &lt;TRUE: "true"&gt;
| &lt;FALSE: "false"&gt;
| &lt;NULL: "null"&gt;
| &lt;OPTION: "option"&gt;
| &lt;IMPORT: "import"&gt;
| &lt;AS: "as"&gt;
}

   </PRE>
        </TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
/* OPERATORS */</PRE>
        </TD>
    </TR>
    <!-- Token -->
    <TR>
        <TD>
   <PRE>
&lt;DEFAULT&gt; TOKEN : {
&lt;COMMA: ","&gt;
| &lt;COLON: ":"&gt;
| &lt;QUEM: "?"&gt;
| &lt;SEMI: ";"&gt;
| &lt;ASS: "="&gt;
| &lt;QUOTE_SINGLE: "\'"&gt;
| &lt;QUOTE_DOUBLE: "\""&gt;
| &lt;OPAR: "("&gt;
| &lt;CPAR: ")"&gt;
| &lt;OBRA: "["&gt;
| &lt;CBRA: "]"&gt;
| &lt;OCBR: "{"&gt;
| &lt;OCBREXT: ["@","#","$","%","&amp;"] &lt;OCBR&gt;&gt;
| &lt;CCBR: "}"&gt;
| &lt;BANG: "!"&gt;
| &lt;PLUS: "+"&gt;
| &lt;MINUS: "-"&gt;
| &lt;STAR: "*"&gt;
| &lt;SLASH: "/"&gt;
| &lt;REM: "%"&gt;
| &lt;ALI: "\\"&gt;
| &lt;GT: "&gt;"&gt;
| &lt;GE: "&gt;="&gt;
| &lt;LT: "&lt;"&gt;
| &lt;LE: "&lt;="&gt;
| &lt;EQ: "=="&gt;
| &lt;NE: "!="&gt;
| &lt;BIT_AND: "&amp;"&gt;
| &lt;BIT_OR: "|"&gt;
| &lt;XOR: "^"&gt;
| &lt;LSHIFT: "&lt;&lt;"&gt;
| &lt;RSIGNEDSHIFT: "&gt;&gt;"&gt;
| &lt;RUNSIGNEDSHIFT: "&gt;&gt;&gt;"&gt;
| &lt;SC_OR: "||"&gt;
| &lt;SC_AND: "&amp;&amp;"&gt;
}

   </PRE>
        </TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
/* IDENTIFIERS */</PRE>
        </TD>
    </TR>
    <!-- Token -->
    <TR>
        <TD>
   <PRE>
&lt;DEFAULT&gt; TOKEN : {
&lt;#LETTER: ["$","A"-"Z","_","a"-"z","\u00aa"-"\u00ad","\u00b5"-"\u00b6","\u00ba"-"\u00bb","\u00c0"-"\u00d6","\u00d8"-"\u00f6","\u00f8"-"\u00ff","\u0100"-"\u1fff","\u3040"-"\u318f","\u3300"-"\u337f","\u3400"-"\u3d2d","\u4e00"-"\u9fff","\uf900"-"\ufaff","\ufb00"-"\ufb06","\ufb13"-"\ufb17","\ufb1f"-"\ufb28","\ufb2a"-"\ufb36","\ufb38"-"\ufb3e","\ufb40"-"\ufb41","\ufb43"-"\ufb44","\ufb46"-"\ufb4f","\ufb50"-"\ufdd7","\ufdf0"-"\ufdfd","\ufe70"-"\ufefc","\uff1f"-"\uff3a","\uff3f"-"\uff5e","\uff61"-"\uffbe","\uffc2"-"\uffc7","\uffca"-"\uffcf","\uffd2"-"\uffd7","\uffda"-"\uffdc"]&gt;
| &lt;#STR_UNICODE: "\\u" (["0"-"9","a"-"f","A"-"F"]){4}&gt;
| &lt;#STR_DOUBLE_BODY: ~["\"","\\","\r","\n","\f","\t"] | "\\" ["r","n","f","t","\\","b","\"","\'"]&gt;
| &lt;STR_DOUBLE_QUOTED: &lt;QUOTE_DOUBLE&gt; (&lt;STR_DOUBLE_BODY&gt;)* &lt;QUOTE_DOUBLE&gt;&gt;
| &lt;#STR_SINGLE_BODY: ~["\'","\\","\r","\n","\f","\t"] | "\\" ["r","n","f","t","\\","b","\"","\'"]&gt;
| &lt;STR_SINGLE_QUOTED: &lt;QUOTE_SINGLE&gt; (&lt;STR_SINGLE_BODY&gt;)* &lt;QUOTE_SINGLE&gt;&gt;
| &lt;STR_EMPTY: "\"\"" | "\'\'"&gt;
| &lt;#IDENTIFIER_S: &lt;LETTER&gt; (["0"-"9"] | &lt;LETTER&gt;)*&gt;
| &lt;#IDENTIFIER_A: ("[" (["0"-"9"])+ "]")+&gt;
| &lt;IDENTIFIER: &lt;IDENTIFIER_S&gt; ("." &lt;IDENTIFIER_S&gt; | &lt;IDENTIFIER_A&gt;)*&gt;
}

   </PRE>
        </TD>
    </TR>
</TABLE>
<H2 ALIGN=CENTER>NON-TERMINALS</H2>
<TABLE>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
//-----------------------------------------------------------------------------

// .标识符
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod1">identifier</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( &lt;IDENTIFIER&gt; ) | ( &lt;OCBREXT&gt; &lt;IDENTIFIER&gt; &lt;CCBR&gt; ) )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .带引号的字符串
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod2">stringValue</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( &lt;STR_DOUBLE_QUOTED&gt; ) | ( &lt;STR_SINGLE_QUOTED&gt; ) | ( &lt;STR_EMPTY&gt; ) )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .空值
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod3">nullValue</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>&lt;NULL&gt;</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .布尔
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod4">booleanValue</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( &lt;TRUE&gt; )</TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( &lt;FALSE&gt; )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .数字
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod5">numberValue</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( &lt;DECIMAL_NUM&gt; ) | ( &lt;INTEGER_NUM&gt; ) | ( &lt;HEX_NUM&gt; ) | ( &lt;OCTAL_NUM&gt; ) | ( &lt;BINARY_NUM&gt; ) )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .列表：[ ... ]
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod6">list</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( &lt;OBRA&gt; &lt;CBRA&gt; ) | ( &lt;OBRA&gt; <A HREF="#prod7">expression</A> ( &lt;COMMA&gt; <A HREF="#prod7">expression</A> )* &lt;CBRA&gt; ) )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .对象：
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod8">object</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( &lt;OCBR&gt; &lt;CCBR&gt; ) | ( &lt;OCBR&gt; <A HREF="#prod2">stringValue</A> ( &lt;COLON&gt; <A HREF="#prod7">expression</A> )? ( &lt;COMMA&gt; <A HREF="#prod2">stringValue</A> ( &lt;COLON&gt; <A HREF="#prod7">expression</A> )? )* &lt;CCBR&gt; ) )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
//-----------------------------------------------------------------------------

// .表达式 =   表达式 or 表达式 + 运算符
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod7">expression</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( &lt;OPAR&gt; <A HREF="#prod7">expression</A> &lt;CPAR&gt; ( <A HREF="#prod9">extExpression</A> )? )</TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod10">unaryExpression</A> )</TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod11">basicValue</A> ( <A HREF="#prod9">extExpression</A> )? )</TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod10">unaryExpression</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( &lt;BANG&gt; | &lt;MINUS&gt; ) <A HREF="#prod11">basicValue</A></TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod9">extExpression</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( <A HREF="#prod12">dyadicExpression</A> ) | ( <A HREF="#prod13">ternaryExpression</A> ) )</TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod12">dyadicExpression</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( &lt;PLUS&gt; | &lt;MINUS&gt; | &lt;STAR&gt; | &lt;SLASH&gt; | &lt;REM&gt; | &lt;ALI&gt; | &lt;GT&gt; | &lt;GE&gt; | &lt;LT&gt; | &lt;LE&gt; | &lt;EQ&gt; | &lt;NE&gt; | &lt;BIT_AND&gt; | &lt;BIT_OR&gt; | &lt;XOR&gt; | &lt;LSHIFT&gt; | &lt;RSIGNEDSHIFT&gt; | &lt;RUNSIGNEDSHIFT&gt; | &lt;SC_OR&gt; | &lt;SC_AND&gt; ) <A HREF="#prod7">expression</A></TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod13">ternaryExpression</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>&lt;QUEM&gt; <A HREF="#prod7">expression</A> &lt;COLON&gt; <A HREF="#prod7">expression</A></TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .值
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod11">basicValue</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( <A HREF="#prod14">primitiveValue</A> ) | ( ( <A HREF="#prod1">identifier</A> ( <A HREF="#prod15">funCall</A> )? ) ) | ( <A HREF="#prod6">list</A> ) | ( <A HREF="#prod8">object</A> ) )</TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod14">primitiveValue</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod2">stringValue</A> )</TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod3">nullValue</A> )</TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod4">booleanValue</A> )</TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>|</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod5">numberValue</A> )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
//-----------------------------------------------------------------------------
// .函数参数
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod16">callerParamItem</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( <A HREF="#prod17">lambdaDef</A> ) | ( <A HREF="#prod7">expression</A> ) )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .参数集：(xx , xx , xx)
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod18">callerParamSet</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( &lt;OPAR&gt; ( ( &lt;CPAR&gt; ) | ( <A HREF="#prod16">callerParamItem</A> ( &lt;COMMA&gt; <A HREF="#prod16">callerParamItem</A> )* &lt;CPAR&gt; ) ) ( "-&gt;" <A HREF="#prod2">stringValue</A> )? ) | ( "-&gt;" ( <A HREF="#prod2">stringValue</A> )? ) )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .函数调用
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod15">funCall</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod18">callerParamSet</A> ( ( "~" ) | ( <A HREF="#prod6">list</A> ) | ( <A HREF="#prod8">object</A> ) )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .Lambda函数： lambda : (obj,obj2) -> {}
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod17">lambdaDef</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>&lt;LAMBDA&gt; ":" &lt;OPAR&gt; ( &lt;IDENTIFIER&gt; )? ( &lt;COMMA&gt; &lt;IDENTIFIER&gt; )* &lt;CPAR&gt; "-&gt;" ( ( &lt;OCBR&gt; <A HREF="#prod19">blockSet</A> &lt;CCBR&gt; ) | ( <A HREF="#prod20">block</A> ) )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
//-----------------------------------------------------------------------------
// .函数
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod21">varBlock</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>&lt;VAR&gt; <A HREF="#prod1">identifier</A> &lt;ASS&gt; ( ( <A HREF="#prod17">lambdaDef</A> ) | ( <A HREF="#prod7">expression</A> ) )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .反回
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod22">returnBlock</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>&lt;RETURN&gt; <A HREF="#prod7">expression</A></TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .判断
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod23">ifBlock</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>&lt;IF&gt; &lt;OPAR&gt; <A HREF="#prod7">expression</A> &lt;CPAR&gt; <A HREF="#prod19">blockSet</A> ( &lt;ELSEIF&gt; &lt;OPAR&gt; <A HREF="#prod7">expression</A> &lt;CPAR&gt; <A HREF="#prod19">blockSet</A> )* ( &lt;ELSE&gt; <A HREF="#prod19">blockSet</A> )? &lt;END&gt;</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .异常 or 中断
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod24">breakBlock</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( &lt;EXIT&gt; ) | ( &lt;THROW&gt; ) ) ( ( <A HREF="#prod25">breakBlockStatus</A> <A HREF="#prod7">expression</A> ) | ( <A HREF="#prod7">expression</A> ) )</TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod25">breakBlockStatus</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE><A HREF="#prod5">numberValue</A> &lt;COMMA&gt;</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .选项指令
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod26">optionBlock</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>&lt;OPTION&gt; <A HREF="#prod1">identifier</A> &lt;ASS&gt; <A HREF="#prod14">primitiveValue</A></TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .import指令
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod27">importBlock</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>&lt;IMPORT&gt; <A HREF="#prod2">stringValue</A> &lt;AS&gt; <A HREF="#prod1">identifier</A></TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .指令
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod20">block</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( <A HREF="#prod21">varBlock</A> ) | ( <A HREF="#prod23">ifBlock</A> ) | ( <A HREF="#prod22">returnBlock</A> ) | ( <A HREF="#prod24">breakBlock</A> ) )</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// .块
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod19">blockSet</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( <A HREF="#prod20">block</A> ( &lt;SEMI&gt; )? )*</TD>
    </TR>
    <!-- Special token -->
    <TR>
        <TD>
<PRE>
// 入口
</PRE>
        </TD>
    </TR>
    <TR>
        <TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod28">rootBlock</A></TD>
        <TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
        <TD ALIGN=LEFT VALIGN=BASELINE>( ( <A HREF="#prod27">importBlock</A> ( &lt;SEMI&gt; )? ) | ( <A HREF="#prod26">optionBlock</A> ( &lt;SEMI&gt; )? ) )* <A HREF="#prod19">blockSet</A> &lt;EOF&gt;</TD>
    </TR>
</TABLE>
</BODY>
</HTML>
